package com.hh.admin.controller;

import java.util.List;

import javax.validation.Valid;

import org.hibernate.validator.constraints.NotBlank;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.hh.admin.entity.SysMenu;
import com.hh.admin.exception.ValidEntityException;
import com.hh.admin.service.ISysMenuService;
import com.hh.admin.view.SysMenuView;
import com.hh.core.annotion.OperationLog;
import com.hh.core.common.BaseController;
import com.hh.core.entity.ResultEntity;
import com.hh.core.entity.ZtreeEntity;
import com.hh.core.enums.OperationLogEnum;
import com.hh.core.log.LogTempObject;

/**
 * <p>
 * 菜单 控制层
 * </p>
 *
 * @author hxn
 * @since 2018-01-16
 */
@Controller
@RequestMapping("/admin/sysMenu")
public class SysMenuController extends BaseController{

	@Autowired
	ISysMenuService sysMenuService;
	
	/**
	 * 
	* @Title: menu  
	* @Description:   菜单管理首页
	* @param @param model
	* @param @return    设定文件  
	* @return String    返回类型  
	* @author hxn
	* @date 2018年1月26日 下午4:21:15  
	* @throws
	 */
	@RequestMapping(value = "", method = RequestMethod.GET)
	public String menu(Model model) {
		return SysMenuView.MENU;
	}
	
	/**
	 * 
	* @Title: menuList  
	* @Description:   获取菜单列表
	* @param @param menuName
	* @param @param level
	* @param @return    设定文件  
	* @return List<SysMenu>    返回类型  
	* @author hxn
	* @date 2018年1月26日 下午4:21:36  
	* @throws
	 */
	@RequestMapping(value = "/list")
	@ResponseBody
	public List<SysMenu> menuList(SysMenu menu){
		EntityWrapper<SysMenu> entityWrapper = new EntityWrapper<>();
		entityWrapper.setEntity(menu);
//		entityWrapper.like("MENU_NAME", menu.getMenuName());
//		entityWrapper.eq("LEVEL", menu.getLevel());
		List<SysMenu> menuList = sysMenuService.selectList(entityWrapper);
		return menuList;
	}
	
	/**
	 * 
	* @Title: menuDetail  
	* @Description:   菜单添加页
	* @param @return    设定文件  
	* @return String    返回类型  
	* @author hxn
	* @date 2018年1月26日 下午4:21:49  
	* @throws
	 */
	@RequestMapping(value = "/add", method = RequestMethod.GET)
	public String menuAdd(Model model){
//		model.addAttribute("menuData", sysMenuService.getSelectMenuData());
		model.addAttribute("action", "add");
		return SysMenuView.MENU_DETAIL;
	}
	
	/**
	 * 
	* @Title: addMenu  
	* @Description:   添加菜单动作
	* @param     设定文件  
	* @return void    返回类型  
	* @author hxn
	* @date 2018年1月30日 下午2:26:41  
	* @throws
	 */
	@RequestMapping(value = "/add", method = RequestMethod.POST)
	@ResponseBody
	@OperationLog(value="添加菜单或按钮",type=OperationLogEnum.ADD)
	public ResultEntity addMenu(@Valid SysMenu menu, BindingResult result){
		if(result.hasErrors()){
			throw new ValidEntityException();
		}
		sysMenuService.insert(menu);
		return successResult("添加成功!");
	}
	
	/**
	 * 
	* @Title: menuDetail  
	* @Description:   菜单编辑页
	* @param @return    设定文件  
	* @return String    返回类型  
	* @author hxn
	* @date 2018年1月26日 下午4:22:06  
	* @throws
	 */
	@RequestMapping(value = "/edit/{id}", method = RequestMethod.GET)
	public String menuEdit(@PathVariable Long id,Model model){
		SysMenu menu = sysMenuService.selectById(id);
		model.addAttribute("menu", menu);
//		model.addAttribute("menuData", sysMenuService.getSelectMenuData());
		model.addAttribute("action", "edit");
		
		LogTempObject.me().setObject(menu);
		return SysMenuView.MENU_DETAIL;
	}
	
	/**
	 * 
	* @Title: editMenu  
	* @Description:   修改菜单
	* @param @return    设定文件  
	* @return ResultEntity    返回类型  
	* @author hxn
	* @date 2018年1月31日 下午1:52:14  
	* @throws
	 */
	@RequestMapping(value = "/edit", method = RequestMethod.POST)
	@ResponseBody
	@OperationLog(value="修改菜单",type=OperationLogEnum.EDIT)
	public ResultEntity editMenu(@Valid SysMenu menu, BindingResult result){
		if(result.hasErrors()){
			throw new ValidEntityException();
		}
		sysMenuService.updateById(menu);
		return successResult("修改成功!");
	}
	
	/**
	 * 
	* @Title: deleteMenu  
	* @Description:   删除菜单
	* @param @param id
	* @param @return    设定文件  
	* @return ResultEntity    返回类型  
	* @author hxn
	* @date 2018年1月31日 下午1:53:40  
	* @throws
	 */
	@RequestMapping(value = "/delete", method = RequestMethod.POST)
	@ResponseBody
	@OperationLog(value="删除菜单",type=OperationLogEnum.DELETE)
	public ResultEntity deleteMenu(@NotBlank(message = "ID不能为空")Long id){
		sysMenuService.deleteById(id);
		return successResult("删除成功!");
	}
	
	/**
	 * 
	* @Title: ztreeList  
	* @Description:   菜单树形数据
	* @param @return    设定文件  
	* @return List<ZtreeEntity>    返回类型  
	* @author hxn
	* @date 2018年2月7日 下午4:16:46  
	* @throws
	 */
	@RequestMapping(value = "/ztreeList", method = RequestMethod.POST)
	@ResponseBody
	public List<ZtreeEntity> ztreeList(){
		List<ZtreeEntity> ztreeList = sysMenuService.getZtree();
		ztreeList.add(ZtreeEntity.getTopNode("总菜单"));
		return ztreeList;
	}
}
